home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 April / PCWorld_2008-04_cd.bin / v cisle / ozo / zotero-1.0.3.xpi / chrome / zotero.jar / content / zotero / advancedSearch.js < prev    next >
Encoding:
Text File  |  2007-04-16  |  3.3 KB  |  134 lines

  1. var ZoteroAdvancedSearch = new function() {
  2.     this.onLoad = onLoad;
  3.     this.search = search;
  4.     this.clear = clear;
  5.     this.save = save;
  6.     this.onDblClick = onDblClick;
  7.     this.onUnload = onUnload;
  8.     
  9.     this.itemsView = false;
  10.     
  11.     var _searchBox;
  12.     
  13.     function onLoad() {
  14.         _searchBox = document.getElementById('zotero-search-box');
  15.         
  16.         // Set font size from pref
  17.         var sbc = document.getElementById('zotero-search-box-container');
  18.         Zotero.setFontSize(sbc);
  19.         
  20.         var io = window.arguments[0];
  21.         _searchBox.search = io.dataIn.search;
  22.     }
  23.     
  24.     
  25.     function search() {
  26.         _searchBox.updateSearch();
  27.         
  28.         // A minimal implementation of Zotero.CollectionTreeView
  29.         var itemGroup = {
  30.             isSearchMode: function() { return true; },
  31.             getChildItems: function () {
  32.                 var ids = _searchBox.search.search();
  33.                 return Zotero.Items.get(ids);
  34.             },
  35.             isLibrary: function () { return false; },
  36.             isCollection: function () { return false; },
  37.             isSearch: function () { return true; }
  38.         }
  39.         
  40.         if (this.itemsView) {
  41.             this.itemsView.unregister();
  42.         }
  43.         
  44.         this.itemsView = new Zotero.ItemTreeView(itemGroup, false);
  45.         document.getElementById('zotero-items-tree').view = this.itemsView;
  46.     }
  47.     
  48.     
  49.     function clear() {
  50.         if (this.itemsView) {
  51.             this.itemsView.unregister();
  52.         }
  53.         document.getElementById('zotero-items-tree').view = null;
  54.         
  55.         var s = new Zotero.Search();
  56.         s.addCondition('title', 'contains', '');
  57.         _searchBox.search = s;
  58.     }
  59.     
  60.     
  61.     function save() {
  62.         _searchBox.updateSearch();
  63.         
  64.         var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
  65.                                 .getService(Components.interfaces.nsIPromptService);
  66.         
  67.         var untitled = Zotero.DB.getNextName('collections', 'collectionName',
  68.             Zotero.getString('pane.collections.untitled'));
  69.         
  70.         var name = { value: untitled };
  71.         var result = promptService.prompt(window,
  72.             Zotero.getString('pane.collections.newSavedSeach'),
  73.             Zotero.getString('pane.collections.savedSearchName'), name, "", {});
  74.         
  75.         if (!result)
  76.         {
  77.             return;
  78.         }
  79.         
  80.         if (!name.value)
  81.         {
  82.             newName.value = untitled;
  83.         }
  84.         
  85.         var s = _searchBox.search.clone();
  86.         s.setName(name.value);
  87.         s.save();
  88.     }
  89.     
  90.     
  91.     // Adapted from: http://www.xulplanet.com/references/elemref/ref_tree.html#cmnote-9
  92.     function onDblClick(event, tree)
  93.     {
  94.         if (event && tree && event.type == "dblclick")
  95.         {
  96.             var row = {}, col = {}, obj = {};
  97.             tree.treeBoxObject.getCellAt(event.clientX, event.clientY, row, col, obj);
  98.             // obj.value == cell/text/image
  99.             // TODO: handle collection double-click
  100.             if (obj.value && this.itemsView && this.itemsView.selection.currentIndex > -1)
  101.             {
  102.                 var item = this.itemsView.getSelectedItems()[0];
  103.                 
  104.                 var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
  105.                                .getService(Components.interfaces.nsIWindowMediator);
  106.                 
  107.                 var lastWin = wm.getMostRecentWindow("navigator:browser");
  108.                 
  109.                 if (!lastWin) {
  110.                     window.open();
  111.                     var newWindow = wm.getMostRecentWindow("navigator:browser");
  112.                     var b = newWindow.getBrowser();
  113.                     return;
  114.                 }
  115.                 
  116.                 if (lastWin.document.getElementById('zotero-pane').getAttribute('hidden') == 'true') {
  117.                     lastWin.ZoteroPane.toggleDisplay();
  118.                 }
  119.                 
  120.                 lastWin.ZoteroPane.selectItem(item.getID(), false, true);
  121.                 lastWin.focus();
  122.             }
  123.         }
  124.     }
  125.     
  126.     
  127.     function onUnload() {
  128.         // Unregister search from Notifier
  129.         if (this.itemsView) {
  130.             this.itemsView.unregister();
  131.         }
  132.     }
  133. }
  134.